/**
 * API类型定义文件
 * 包含所有API相关的接口与类型定义
 */
//
// // 用户相关类型
// export interface User {
//     id?: string;
//     username: string;
//     password?: string;
//     realName?: string;
//     email?: string;
//     phone?: string;
//     role?: string;
//     createTime?: number;
//     updateTime?: number;
// }
//
// // 登录参数
// export interface LoginParams {
//     username: string;
//     password: string;
//     remember?: boolean;
// }
//
// // 用户信息
// export interface UserInfo {
//     id: string;
//     username: string;
//     realName: string;
//     email: string;
//     phone: string;
//     role: string;
//     createTime: number;
//     updateTime: number;
// }
//
// // 修改密码参数
// export interface ChangePasswordParams {
//     oldPassword: string;
//     newPassword: string;
//     confirmPassword: string;
// }

// 发票明细项
export interface InvoiceDetail {
    id?: string;
    invoiceId?: string;
    itemName: string; // 项目名称
    specificationModel: string; // 规格型号 - 与数据库字段specification_model对应
    unit?: string; // 计量单位
    quantity: number; // 数量
    unitPrice: number; // 单价
    amount: number; // 金额
    taxRate?: number; // 税率
    taxAmount?: number; // 税额
    createTime?: string;
    updateTime?: string;

    // 以下为兼容前端代码的字段，使用时会自动同步到上面的标准字段
    specification?: string; // 兼容字段，与specificationModel同步
    price?: number; // 兼容字段，与unitPrice同步
    totalAmount?: number; // 兼容字段，与amount同步
    remark?: string; // 兼容字段，数据库中不存在
}

// 发票数据
export interface Invoice {
    id?: string;
    invoiceNumber: string; // 发票编号
    orderId?: string; // 关联订单ID
    receiptId?: string; // 关联收货单ID
    supplierName?: string; // 供应商名称
    category: string; // 发票类别
    issueDate: string; // 开票日期
    purchaserInfo?: string; // 购买方信息
    sellerInfo?: string; // 销售方信息
    remarks?: string; // 备注信息
    issuer?: string; // 开票人
    filePath?: string; // 发票文件路径
    totalAmount: number; // 总金额
    totalTax?: number; // 总税额
    totalAmountWithTax?: number; // 价税合计
    createTime?: string;
    updateTime?: string;
    details?: InvoiceDetail[]; // 发票明细
    // 以下为兼容前端代码的字段
    items?: InvoiceDetail[];
    invoiceCode?: string;
    customerName?: string;
    customerCode?: string;
    customerTaxCode?: string;
    customerAddress?: string;
    customerBank?: string;
    customerAccount?: string;
    invoiceDate?: string;
    totalTaxAmount?: number;
    grandTotal?: number;
    createBy?: string;
    updateBy?: string;
}

// 发票查询参数
export interface InvoiceQueryParams {
    page?: number;
    size?: number;
    pageNum?: number;
    pageSize?: number;
    invoiceNumber?: string;
    customerName?: string;
    createTimeStart?: string;
    createTimeEnd?: string;
    category?: string;
    startDate?: string;
    endDate?: string;
}

//
// // 文件上传结果
// export interface FileUploadResult {
//     filePath: string;
//     url: string;
//     filename: string;
//     size: number;
//     type: string;
// }
//
// // 分页结果
// export interface PageResult<T> {
//     records: T[];
//     total: number;
//     size: number;
//     current: number;
//     pages: number;
//     searchCount?: boolean;
//     orders?: any[];
// }

// 订单项
export interface OrderItem {
    id?: string;
    orderId?: string;
    itemName: string; // 商品名称，对应数据库的item_name
    specification?: string; // 规格型号
    unit: string; // 单位
    quantity: number; // 数量
    unitPrice: number; // 单价，对应数据库的unit_price
    total: number; // 小计金额，对应数据库的total

    // 以下为兼容性字段，仅供前端使用
    productName?: string; // 兼容前端代码，同itemName
    productCode?: string; // 兼容前端代码，没有对应数据库字段
    price?: number; // 兼容前端代码，同unitPrice
    amount?: number; // 兼容前端代码，同total
    taxRate?: number; // 兼容前端代码，没有对应数据库字段
    taxAmount?: number; // 兼容前端代码，没有对应数据库字段
    remark?: string; // 兼容前端代码，没有对应数据库字段
}

// 订单
export interface Order {
    id?: string;
    orderNumber: string; // 订单编号
    supplierName: string; // 供应商名称
    status: string; // 订单状态（待收货/已收货/已开票）
    totalAmount: number; // 订单总金额
    purchaseDate?: string; // 采购日期
    expectedDeliveryDate?: string; // 期望交货日期
    purchaser?: string; // 采购员
    createTime?: string; // 创建时间
    updateTime?: string; // 更新时间
    items?: OrderItem[]; // 订单明细项
}

// // 为前端组件提供类型兼容
// export interface OrderData extends Order {
//     // 保留所有Order接口的字段，并添加额外前端需要的字段
// }

// 收货单项
export interface ReceiptItem {
    id?: string;
    receiptId?: string;
    itemName: string; // 商品名称
    specification?: string; // 规格型号
    unit?: string; // 单位
    quantity: number; // 数量
    unitPrice?: number; // 单价
    price?: number; // 兼容前端代码的单价字段
    total?: number; // 小计金额
    amount?: number; // 兼容前端代码的金额字段
    remark?: string; // 备注
    // 兼容前端代码的字段
    productName?: string;
    productCode?: string;
}

// 收货单
export interface Receipt {
    id?: string;
    receiptNumber: string; // 收货单编号
    orderId: string; // 关联订单ID
    supplierName: string; // 供应商名称
    status: string; // 收货单状态（待验收/已验收）
    receiptDate?: string; // 收货日期
    totalAmount: number; // 总金额
    createTime?: string; // 创建时间
    updateTime?: string; // 更新时间
    items?: ReceiptItem[]; // 收货单明细
}

// // 为前端组件提供类型兼容
// export interface ReceiptData extends Receipt {
//     // 保留所有Receipt接口的字段，并添加额外前端需要的字段
// }

// // 匹配字段
// export interface MatchField {
//     fieldName: string;
//     orderValue: string;
//     receiptValue: string;
//     invoiceValue: string;
//     match: boolean;
// }

// // 匹配结果
// export interface MatchResult {
//     match: boolean;
//     orderInfo: any;
//     receiptInfo: any;
//     invoiceInfo: any;
//     fields: MatchField[];
//     difference?: string;
//     orderNumber?: string;
//     receiptNumber?: string;
//     invoiceNumber?: string;
//     matchTime?: string;
// }

// 已匹配订单视图对象
export interface MatchedOrderVO {
    // 订单信息
    orderId: number;
    orderNumber: string;
    supplierName: string;
    orderAmount: number;
    orderStatus: string;
    purchaseDate: string;

    // 收货单信息
    receiptId: number;
    receiptNumber: string;
    receiptAmount: number;
    receiptStatus: string;

    // 发票信息
    invoiceId: number;
    invoiceNumber: string;
    invoiceAmount: number;
    issueDate: string;

    // 匹配信息
    matchId: number;
    matchResult: string;
    difference: string;
    matchTime: string;
}

// // API响应接口
// export interface ApiResult<T> {
//     code: number;
//     message: string;
//     success?: boolean;
//     data: T;
// }
//
// /**
//  * 日期范围查询参数
//  */
// export interface DateRangeParams {
//     startDate: string;
//     endDate: string;
// }